#ifndef _THREAD_POOL_
#define _THREAD_POOL_

#include <pthread.h>
#include <list>

#include "../Lock/locker.h"
/* 封装线程池 */

template<class T>
class ThreadPool{
public:
    ThreadPool(int thread_num = 8, int max_requests = 10000);
    ~ThreadPool();

    // 任务插入待处理队列
    bool Push(T* task);

    void Run();

private:
    static void* callBack_Task(void* args);
private:
    int _thread_cnt;            // 线程数量
    pthread_t * _thread_Set;    // 线程数组
    int _max_retquests;          // 限制请求队列中的最大请求数
    std::list<T*> _task_Queue;  // 请求队列
    Locker _queue_locker;       // 互斥锁
    Sem _queue_sem_stat;            // 使用信号量判断任务处理方式（处理/不处理）
    bool _stop_thread;          // 是否结束线程
};

#endif